package com.qjc.demo.base.reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Date;

/**
 * @Description:
 * @Author: qjc
 * @Date: 2020/5/23
 */
public class ReflectTest {
    public static void main(String[] args) {
        try {
            Class<?> aClass = Class.forName("com.qjc.demo.base.reflect.ReflectTestEntity");
            Constructor<?> constructor = aClass.getConstructor();//获取构造器
            Object object = constructor.newInstance();//获取实例对象
            Method[] methods = aClass.getMethods();//获取方法
            Field[] fields = aClass.getFields();//获取public属性
            Field[] declaredFields = aClass.getDeclaredFields();//获取public和private的属性
            for (Method method : methods) {
                String name = method.getName();
                if (name.startsWith("set")) {
                    Class<?>[] parameterTypes = method.getParameterTypes();//获取形参参数类型，是一个集合
                    Class<?> parameterType = parameterTypes[0];
                    String name1 = parameterType.getName();//获取形参参数名
                    if ("java.lang.Integer".equals(name1)) {
                        method.invoke(object, 1);//通过反射设置值
                    } else if ("java.util.Date".equals(name1)) {
                        method.invoke(object, new Date());
                    } else if ("java.lang.Double".equals(name1)) {
                        method.invoke(object, 1.);
                    } else {
                        method.invoke(object, "aaa");
                    }
                }
            }
            for (Method method : methods) {
                String name = method.getName();
                if (name.startsWith("get")) {
                    System.err.println(method.invoke(object));//通过反射获取值
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
